package controller;

import domain.Jobholder;
import domain.Recruiter;
import domain.Resume;
import domain.Work;
import service.ResumeService;
import service.WorkService;
import service.impl.ResumeServiceImpl;
import service.impl.WorkServiceImpl;
import ui.ResumeUI;
import ui.WorkUI;
import util.CheckUtil;
import util.InputUtil;
import util.PrintUtil;
import util.SessionUtil;

import java.util.List;

public final class WorkController {
    private WorkController() {}
    private static final WorkService workService = WorkServiceImpl.getINSTANCE();
    private static final ResumeService resumeService = ResumeServiceImpl.getINSTANCE();

    public static void run() {
        index();
    }

    /**
     * 工作首页
     */
    private static void index() {
        /*
         * 1、查看工作以及状态 viewWork();
         * 2、发布工作 addWork();
         * 3、修改工作 manageWorkInformation();
         * 4、删除工作 deleteWork();
         * 5、查看投递的简历 viewResumeByRecruiterId();
         * 0、退出登录
         */
        while (true){
            WorkUI.index();
            switch (InputUtil.getInputInteger("请输入选项：",0,5))
            {
                case 1:
                    //查看工作以及审核状态
                    viewWork();
                    break;
                case 2:
                    //发布工作
                    addWork();
                    break;
                case 3:
                    //修改工作
                    manageWorkInformation();
                    break;
                case 4:
                    //删除工作
                    deleteWork();;
                    break;
                case 5:
                    //查看投递的简历
                    viewResumeByRecruiterId();
                    break;
                case 0:
                    //返回上级
                    return;
            }
        }
    }

    /**
     * 查看工作以及状态
     */
    public static void viewWork() {

        /*
         * Recruiter recruiter = SessionUtil.getRecruiter();
         * 显示所有发布的工作
         * List<Work> works = workService.selectByRecruiterId();
         * WorkUI.showWorkList(works);
         * 1、输入工作编号，编号为0时返回，输入在范围内的编号，获取选中的工作调用Work work = works.get();
         * 2、显示工作详细信息调用WorkUI.showDetailWork(work);
         * 3、通过work的paaState来判断是否通过审核0未审核，1通过审核，2审核失败
         */
        Recruiter recruiter = SessionUtil.getRecruiter();
        //显示所有已发布的工作
        List<Work> works = workService.selectByRecruiterId(recruiter.getId());
        while (true){
            WorkUI.showWorkList(works);
            PrintUtil.printString("请输入工作编号查看详细内容或输入0返回：");
            int judge = InputUtil.askForInt();
            if(judge==0)    return;
            Work work = works.get(judge-1);
            WorkUI.showDetailWork(work);
            int state = work.getPassState();
            if (state == 1) PrintUtil.printString("审核通过");
            else if(state == 2) PrintUtil.printString("审核失败");
            else PrintUtil.printString("待审核");
            String sign = InputUtil.getInputText("是否需要继续查看其他工作？（YES/NO）");
            if(sign.equals("NO")) return;
        }
    }

    /**
     * 发布工作
     */
    public static void addWork() {
        /*
         * Work work = new work;
         * WorkUI.workInformation(work);
         * 请选择需要添加的项
         * 1、公司名称
         * 2、工作地点
         * 3、工作名称
         * 4、工作要求
         * 5、学历要求
         * 6、电话号码
         * 0、返回上级
         * WorkService.addWork(work);
         */
        Work work = new Work();
        work.setName(InputUtil.getInputText("请输入公司名称："));
        work.setPlace(InputUtil.getInputText("请输入工作地点："));
        work.setInformation(InputUtil.getInputText("请输入工作名称："));
        work.setRequireMent(InputUtil.getInputText("请输入工作要求："));
        work.setEducation(InputUtil.getInputText("请输入学历要求："));
        String tel;
        while (true){
            tel = InputUtil.getInputText("请输入电话号码：");
            if(!CheckUtil.checkTel(tel)){
                PrintUtil.printString("输入格式有误！请重新输入");
            }else break;
        }
        work.setTel(tel);
        Recruiter recruiter = SessionUtil.getRecruiter();
        work.setRecruiterId(recruiter.getId());
        if(workService.addWork(work) == 1) PrintUtil.printString("发布工作成功");
        else PrintUtil.printString("发布工作失败");
    }


    /**
     * 修改工作
     */
    public static void manageWorkInformation() {
        /*
         * Recruiter recruiter = SessionUtil.getRecruiter();
         * WorkUI.workInformation(work);
         * 显示所有发布的工作
         * List<Work> works = workService.selectByRecruiterId();
         * WorkUI.showWorkList(works);
         * 输入工作编号，编号为0时返回，输入在范围内的编号，获取选中的工作调用Work work = works.get();
         * 请选择需要修改的项
         * 1、公司名称
         * 2、工作地点
         * 3、工作名称
         * 4、工作要求
         * 5、学历要求
         * 6、电话号码,修改电话号码，先输入原电话号码，判断电话号码是否一致，一致再输入新电话号码
         * 0、返回上级
         * WorkService.resetWork(work);
         */
        Recruiter recruiter = SessionUtil.getRecruiter();
        //显示所有已发布的工作
        List<Work> works = workService.selectByRecruiterId(recruiter.getId());

        while (true){
            WorkUI.showWorkList(works);
            //获取需要修改的工作编号
            PrintUtil.printString("请输入需要修改的工作编号或输入0返回：");
            int judge = InputUtil.askForInt();
            if(judge==0)    break;
            Work work = works.get(judge-1);
            ok:
            //修改选中的简历
            while (true){
                //展示已选择简历的信息
                WorkUI.showDetailWork(work);
                PrintUtil.printString("请输入需要修改的项或输入0返回上级：");
                switch (InputUtil.askForInt()){
                    case 1:
                        work.setName(InputUtil.getInputText("请输入新的公司名称："));
                        break;
                    case 2:
                        work.setPlace(InputUtil.getInputText("请输入新的工作地点："));
                        break;
                    case 3:
                        work.setInformation(InputUtil.getInputText("请输入新的工作名称："));
                        break;
                    case 4:
                        work.setRequireMent(InputUtil.getInputText("请输入新的工作要求："));
                        break;
                    case 5:
                        work.setEducation(InputUtil.getInputText("请输入新的学历要求："));
                        break;
                    case 6:
                        String tel;
                        while (true){
                            tel = InputUtil.getInputText("请输入新的电话号码：");
                            if(!CheckUtil.checkTel(tel)){
                                PrintUtil.printString("输入格式有误！请重新输入");
                            }else break;
                        }
                        work.setTel(tel);
                        break;
                    case 0:
                        if(workService.resetWork(work)==1) PrintUtil.printString("更新工作成功");
                        else PrintUtil.printString("更新工作失败");
                        break ok;
                }
            }

            //判断是否需要继续修改其他工作
            String sign = InputUtil.getInputText("是否需要继续修改其他工作？（YES/NO）");
            if(sign.equals("YES")) continue;
            if(sign.equals("NO")) return;
        }
    }


    /**
     * 删除工作
     */
    public static void deleteWork() {

        /*
         * Recruiter recruiter = SessionUtil.getRecruiter();
         * 显示所有发布的工作
         * List<Work> works = workService.selectByRecruiterId();
         * WorkUI.showWorkList(works);
         * 1、输入工作编号，编号为0时返回，输入在范围内的编号，获取选中的工作调用Work work = works.get();
         * 2、显示工作详细信息调用WorkUI.showDetailWork(work);
         * 3、询问是否删除该工作
         * 4、删除的话设置del为1则为删除
         */
        Recruiter recruiter = SessionUtil.getRecruiter();
        //显示所有已发布的工作
        List<Work> works = workService.selectByRecruiterId(recruiter.getId());

        while (true) {
            WorkUI.showWorkList(works);
            PrintUtil.printString("请输入需要删除的工作编号查看详细内容或输入0返回：");
            int judge = InputUtil.askForInt();
            if(judge==0) break;
            Work work = works.get(judge-1);
            WorkUI.showDetailWork(work);
            String sign = InputUtil.getInputText("是否删除该工作？（YES/NO）");
            if(sign.equals("YES")) {
                PrintUtil.printString("删除成功！");
                work.setDel(1);
            }
            String sign2 = InputUtil.getInputText("是否需要继续删除其他工作？（YES/NO）");
            if(sign2.equals("NO")) break;
        }
    }

         /**
         * 查看投递的简历
         */
    public static void viewResumeByRecruiterId() {

        /*
		 * Recruiter recruiter = SessionUtil.getRecruiter();
		 * 显示所有投递的简历
         * List<Resume> resumes = resumeService.selectByRecruiterId();
	 	 * ResumeUI.showResumeList(resumes);
	 	 * 1、输入简历编号，编号为0时返回，输入在范围内的编号，获取选中的工作调用Resume resume = resumes.get();
	 	 * 2、显示工作详细信息调用ResumeUI.showDetailResume(resume);
	 	 * 3、询问是否通过此简历调用onResume(resume),将简历中passState设置为1，根据返回值判断是否修改成功，1成功输出简历通过，其它输出简历不通过
         */
        Recruiter recruiter = SessionUtil.getRecruiter();
        //显示所有投递的简历
        List<Resume> resumes = resumeService.selectAll();
        ResumeUI.showResumeList(resumes);
        while (true){
            PrintUtil.printString("请输入简历编号查看详细内容或输入0返回：");
            int judge = InputUtil.askForInt();
            if(judge==0)    break;
            Resume resume = resumes.get(judge-1);
            ResumeUI.showDetailResume(resume);
            String sign = InputUtil.getInputText("是否通过该简历？（YES/NO）");
            if(sign.equals("YES")) {
                if(resumeService.onResume(resume)==1) PrintUtil.printString("简历通过！");
            }else PrintUtil.printString("简历不通过！");

            String sign2 = InputUtil.getInputText("是否需要继续查看其他工作？（YES/NO）");
            if(sign2.equals("NO")) break;
        }
    }
}
